/*
 * Copyright (c) 2018.
 * http://www.ulabcare.com
 */

package com.mt.roll.upms.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.mt.roll.core.params.EnabledParam;
import com.mt.roll.core.params.IdListParam;
import com.mt.roll.core.params.IdParam;
import com.mt.roll.core.vo.IdListVo;
import com.mt.roll.core.vo.IdVo;
import com.mt.roll.core.vo.R;
import com.mt.roll.upms.params.*;
import com.mt.roll.upms.params.*;
import com.mt.roll.upms.vo.SysUserVo;

import java.util.List;

/**
 * 用户服务接口
 *
 * @author jiff
 * @date 2018/11/14
 * @since 1.0
 */
public interface UserService {

    /**
     * 获取用户
     *
     * @param idParam 主键参数
     * @return 用户
     */
    R<SysUserVo> get(IdParam idParam);

    /**
     * 获取用户列表
     *
     * @param sysUserQueryParam 用户查询参数
     * @return 用户列表
     */
    R<List<SysUserVo>> list(SysUserQueryParam sysUserQueryParam);

    /**
     * 获取用户分页列表
     *
     * @param sysUserQueryParam 用户查询参数
     * @return 用户分页列表
     */
    R<IPage<SysUserVo>> page(SysUserQueryParam sysUserQueryParam);

    /**
     * 新增用户
     *
     * @param sysUserParam 用户参数
     * @return 主键
     */
    R<IdVo> add(SysUserParam sysUserParam);

    /**
     * 更新用户
     *
     * @param sysUserParam 用户参数
     * @return 主键
     */
    R<IdVo> update(SysUserParam sysUserParam);

    /**
     * 启用停用
     *
     * @param enabledParam 启停参数
     * @return 主键
     */
    R<IdVo> enabled(EnabledParam enabledParam);

    /**
     * 修改密码
     *
     * @param modifyPasswordParam 修改密码参数
     * @return 主键
     */
    R<IdVo> modifyPassword(ModifyPasswordParam modifyPasswordParam);

    /**
     * 重置密码
     *
     * @param resetPasswordParam 重置密码参数
     * @return 主键
     */
    R<IdVo> resetPassword(ResetPasswordParam resetPasswordParam);

    /**
     * 找回密码
     *
     * @param findPasswordParam 找回密码参数
     * @return 主键
     */
    R<IdVo> findPassword(FindPasswordParam findPasswordParam);

    /**
     * 删除用户
     *
     * @param idParam 主键参数
     * @return 主键
     */
    R<IdVo> delete(IdParam idParam);

    /**
     * 批量删除用户
     *
     * @param idListParam 主键列表参数
     * @return 主键列表
     */
    R<IdListVo> delete(IdListParam idListParam);

}
